import { defineConfig, UserConfigExport } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import { resolve } from "path"
import WindiCSS from 'vite-plugin-windicss'
// import mdx from 'vite-plugin-mdx'

import * as c from './src/util/c'

// https://vitejs.dev/config/

// https://vitejs.cn/config/#root
let def: UserConfigExport = defineConfig({
  // root: "/",  // 默认： process.cwd()
  base: c.base,   //用哪个路径访问
  resolve: {
    alias: {

      "@": resolve(__dirname, "./src")

    },
  },


  optimizeDeps: {
    // include: ['@kangc/v-md-editor/lib/theme/vuepress.js'],
  },

  // css: {
  //   preprocessorOptions: {
  //     scss: {
  //       additionalData: `@use "~/styles/element/index.scss" as *;`,
  //     },
  //   },
  // },
  plugins: [
    reactRefresh(),
    WindiCSS({
      scan: {
        dirs: ['.'], // all files in the cwd
        fileExtensions: ['vue', 'js', 'ts', 'jsx', 'tsx', 'mdx'], // also enabled scanning for js/ts
      },
    }),
    // mdx({
    //   // https://github.com/brillout/vite-plugin-mdx
    //   // See https://mdxjs.com/advanced/plugins
    //   remarkPlugins: [
    //     // E.g. `remark-frontmatter`
    //   ],
    //   rehypePlugins: [],
    // })
  ],

  // mode: "development",  //serve 时默认 'development'，build 时默认 'production' 在配置中指明将会把 serve 和 build 时的模式 都 覆盖掉。也可以通过命令行 --mode 选项来重写。
  clearScreen: true,  //设为 false 可以避免 Vite 清屏而错过在终端中打印某些关键信息。命令行模式下请通过 --clearScreen false 设置
  logLevel: "info", //调整控制台输出的级别，默认为 'info'
  // 参考： https://vitejs.cn/config/#server-host
  server: {
    host: "0.0.0.0",
    port: 9527,
    open: true,  //true: 自动打开
    // cors: true,  //为开发服务器配置 CORS。默认启用并允许任何源，传递一个 选项对象 来调整行为或设为 false 表示禁用

    // 参考： https://vitejs.cn/config/#server-proxy
    proxy: {
      // 参考：https://github.com/http-party/node-http-proxy#options
      [c.HTTP_API_PREFIX]: {
        // target: "http://local.t-io.org:6060", // 本地模拟数据服务器
        //   target: "http://129.211.52.247:6060", // 本地模拟数据服务器
        target: c.SERVER_PROXY_TARGET,   //连到谭聊生产环境
        changeOrigin: true,
        // rewrite: (path) => {
        //   console.warn("rewrite path before", path);
        //   var re = new RegExp("^" + c.HTTP_API_PREFIX + "\/"); // re
        //   let ret = path.replace(re, '');
        //   console.warn("rewrite path after", ret);
        //   return ret;
        // },
        cookieDomainRewrite: '',//重写cookie 的domain,在localhost上工作时，cookie域必须设置为“”或NULL或FALSE
        headers: {},  //object with extra headers to be added to target requests.
      }
    },
  },

  //参考：https://vitejs.cn/config/#build-target
  build: {
    target: "modules",
    // outDir: ".." + base,  // 默认dist, 指定输出路径（相对于项目根目录).
    outDir: c.outDir + c.base,  // 默认dist, 指定输出路径（相对于项目根目录).

    assetsDir: "assets", //指定生成静态资源的存放路径（相对于 build.outDir）
    cssCodeSplit: true, //启用/禁用 CSS 代码拆分。当启用时，在异步 chunk 中导入的 CSS 将内联到异步 chunk 本身，并在块加载时插入。
    //如果禁用，整个项目中的所有 CSS 将被提取到一个 CSS 文件中。
    sourcemap: false,  //构建后是否生成 source map 文件
    minify: "terser",  // boolean | 'terser' | 'esbuild'设置为 false 可以禁用最小化混淆，或是用来指定使用哪种混淆器。默认为 Terser，虽然 Terser 相对较慢，但大多数情况下构建后的文件体积更小。ESbuild 最小化混淆更快但构建后的文件相对更大
    emptyOutDir: true, //默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。若 outDir 在根目录之外则会抛出一个警告避免意外删除掉重要的文件。可以设置该选项来关闭这个警告。该功能也可以通过命令行参数 --emptyOutDir 来使用。
    brotliSize: true,//启用/禁用 brotli 压缩大小报告。压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能。
    chunkSizeWarningLimit: 1500, //chunk 大小警告的限制（以 kbs 为单位）。
  },
})

export default def;